class GetPostsByTag {
  
  Blog _blog;
  SideBar _bar;
  List _tags;
  TagsReq _tagsReq;
  List _selectedTags;
  
  GetPostsByTag(Blog blog, SideBar bar, String url){
    _blog = blog;
    _bar = bar;
    _tags = new List();
    _selectedTags = new List();
    _tagsReq = new TagsReq(this, url + "?getpoststags=true");
  }
  
  void showWindow(){
	// set "BY DATES" active on side bar
  	SideBar bar = _blog.getSideBar();
    bar.setActive(document.query('#filterByTags'));
  
  _tagsReq.getTagsFromServer();
	document.query('#GetByTagsWindow').innerHTML = Windows.showPostsByTag;
	document.query('#cancelGetByTags').on.click.add((event) => closeWindow());
	document.query('#GetByTags').on.click.add((event) => closeOnGetWindow());
  }
  
  void addTags(List tagsFromServer){
    _tags.addAll(tagsFromServer);
    updateWindowWithTags();
  }
  
  void updateWindowWithTags(){
    String tagsToShow = "";

    for(int i = 0; i < _tags.length; i++){
      tagsToShow +=	'<li class="active" id="' + _tags[i] + '">'+
						'<a href="#">' + _tags[i] +'</a><span class="divider">/</span>'+
					'</li>\n';
    }
    
    document.query('#tagsToShowToUser').innerHTML = tagsToShow;

    for(int i = 0; i < _tags.length; i++){
      document.query('#' + _tags[i]).on.click.add((e) => tagClicked(_tags[i]));
    }
  }
  
  void tagClicked(String selectedTag){
    if(document.query('#' + selectedTag).attributes['class'] == 'active'){
      document.query('#' + selectedTag).attributes['class'] = '';
      _selectedTags.add(selectedTag);
    }else{
      document.query('#' + selectedTag).attributes['class'] = 'active';
      int indexOfElemToRemove = _selectedTags.indexOf(selectedTag);
      
      List newTags = new List();
      for(int i = 0; i < _selectedTags.length; i++){
        if(i != indexOfElemToRemove){
          newTags.add(_selectedTags[i]);
        }
      }
      _selectedTags = newTags; 
    }
  }
 
  void closeWindow(){
    document.query('#GetByTagsWindow').innerHTML = '';
    _tags.clear();
    _selectedTags.clear();
	_bar.revert();
  }
  
  void closeOnGetWindow(){
    document.query('#GetByTagsWindow').innerHTML = '';
    
    if(!_selectedTags.isEmpty()){
      getPosts();
    }
    _tags.clear();
    _selectedTags.clear();
  }
  
  void getPosts(){
    String tags = "";
    for(int i=0; i<_selectedTags.length; i++){
      tags += _selectedTags[i] + " ";
    }
    tags = tags.substring(0, tags.length - 1);
	
	document.query('#pagename').innerHTML = 'Posts with a given set of tags: $tags';
	
	String url = _blog.getURL();
	_blog.setPostRequester(new PostReqByTag(_blog,url,tags));
	_blog.showPosts();
	
	
  }

}
